home *** CD-ROM | disk | FTP | other *** search
- {$N-} {Much Better with $N+}
- Program Clover;
-
- Uses WinProcs, WinTypes, WObjects;
-
- Type
- PCloverWnd = ^TCloverWnd;
- TCloverWnd = Object(TWindow)
- cxClient,
- cyClient : Word;
- hRgnClip : hRgn;
-
- Constructor Init(AParent : PWindowsObject; ATitle : PChar);
- Procedure WMDestroy(Var Msg : TMessage);
- Virtual wm_First + wm_Destroy;
- Procedure WMSize(Var Msg : TMessage);
- Virtual wm_First + wm_Size;
- Procedure Paint(PaintDC : hDC;
- Var PaintInfo : TPaintStruct); Virtual;
- End;
-
- TCloverApp = Object(TApplication)
- Procedure InitMainWindow; Virtual;
- End;
-
- Constructor TCloverWnd.Init(AParent :PWindowsObject; ATitle : PChar);
-
- Begin
- TWindow.Init(AParent, ATitle);
- End;
-
- Procedure TCloverWnd.WMDestroy(Var Msg : TMessage);
- Begin
- DeleteObject(hRgnClip);
- TWindow.WMDestroy(Msg);
- End;
-
- Procedure TCloverWnd.WMSize(Var Msg : TMessage);
- Var
- I : ShortInt;
- WaitCursor : hCursor;
- hRgnTemp : Array[0..5] of hRgn;
-
- Begin
- cxClient := LoWord(Msg.lParam);
- cyClient := HiWord(Msg.lParam);
- {
- WaitCursor := SetCursor(LoadCursor(0, IDC_Wait));
- ShowCursor(True);
- }
- If (hRgnClip <> 0) Then DeleteObject(hRgnClip);
- hRgnTemp[0] := CreateEllipticRgn(0, cyClient div 3,
- cxClient div 2, 2 * cyClient div 3);
- hRgnTemp[1] := CreateEllipticRgn(cxClient div 2, cyClient div 3,
- cxClient, 2 * cyClient div 3);
- hRgnTemp[2] := CreateEllipticRgn(cxClient div 3, 0,
- 2 * cxClient div 3, cyClient div 2);
- hRgnTemp[3] := CreateEllipticRgn(cxClient div 3, cyClient div 2,
- 2 * cxClient div 3, cyClient);
- hRgnTemp[4] := CreateRectRgn(0, 0, 1, 1);
- hRgnTemp[5] := CreateRectRgn(0, 0, 1, 1);
- hRgnClip := CreateRectRgn(0, 0, 1, 1);
-
- CombineRgn(hRgnTemp[4], hRgnTemp[0], hRgnTemp[1], Rgn_Or);
- CombineRgn(hRgnTemp[5], hRgnTemp[2], hRgnTemp[3], Rgn_Or);
- CombineRgn(hRgnClip, hRgnTemp[4], hRgnTemp[5], Rgn_XOr);
-
- For I := 0 to 5 do
- DeleteObject(hRgnTemp[I]);
- {
- SetCursor(hCursor);
- ShowCursor(False);
- }
- {
- TWindow.WMSize(Msg);
- }
- End;
-
- Procedure TCloverWnd.Paint(PaintDC : hDC; Var PaintInfo : TPaintStruct);
- Var
- I : Integer;
- fAngle,
- fRadius : Real;
-
- Begin
- SetViewPortOrg(PaintDC, cxClient div 2, cyClient div 2);
- SelectClipRgn(PaintDC, hRgnClip);
- fRadius := Sqrt(Sqr(CxClient/2) + Sqr(cyClient/2));
- For I := 1 to 360 do
- Begin
- fAngle := fAngle + ((2*Pi)/360);
- MoveTo(PaintDC, 0,0);
- LineTo(PaintDC, Integer(Round(fRadius * Cos(fAngle) + 0.5)),
- Integer(Round(-fRadius * Sin(fAngle) + 0.5)));
- End;
- End;
-
- Procedure TCloverApp.InitMainWindow;
- Begin
- MainWindow := New(PCloverWnd, Init(Nil, 'Draw A Clover'));
- End;
-
- Var CloverApp : TCloverApp;
-
- Begin
- CloverApp.Init('Clover');
- CloverApp.Run;
- CloverApp.Done;
- End.